#include "../../inc/skyInput.h"
#include "../../inc/skyFile.h"
#ifdef _WIN_

#include <windows.h>
namespace Sky
{
Sky::NType::Bool Sky::OSInput::convertInput( UINT uMsg, WPARAM wParam, LPARAM lParam )
{
	if((lParam&0x40000000)==0&&(uMsg == WM_SYSKEYDOWN||uMsg==WM_KEYDOWN ))
	{
		_type = KeyDown;
		_key = KeyMap[wParam&0xFF];
		return vTrue;
	}
	else if((lParam&0x80000000)!=0&&(uMsg == WM_SYSKEYUP||uMsg == WM_KEYUP))
	{
		_type = KeyUp;
		_key = KeyMap[wParam&0xFF];
		return vTrue;
	}
	else if((lParam&0xc0000000)!=0&&(uMsg == WM_SYSKEYDOWN || uMsg == WM_KEYDOWN))
	{
		_type = KeyRepeat;
		_key = KeyMap[wParam&0xFF];
		return vTrue;
	}
	else if(uMsg == WM_LBUTTONDOWN)
	{
		_type = MouseDown;
		_mouse = LeftDown;
		_x = LOWORD(lParam);
		_y = HIWORD(lParam);
		return vTrue;
	}
	else if(uMsg == WM_MBUTTONDOWN)
	{
		return vTrue;
	}
	else if(uMsg == WM_RBUTTONDOWN )
	{
		_type = MouseDown;
		_mouse = RightDown;
		_x = LOWORD(lParam);
		_y = HIWORD(lParam);
		return vTrue;
	}
	else if(uMsg == WM_LBUTTONUP)
	{
		_type = MouseUp;
		_mouse = LeftUp;
		_x = LOWORD(lParam);
		_y = HIWORD(lParam);
		return vTrue;
	}
	else if(uMsg == WM_MBUTTONUP)
	{
		return vTrue;
	}
	else if(uMsg == WM_RBUTTONUP)
	{
		_type = MouseUp;
		_mouse = RightUp;
		_x = LOWORD(lParam);
		_y = HIWORD(lParam);
		return vTrue;
	}
	else if(uMsg == WM_MOUSEMOVE )
	{
		_type = MouseMove;
		_x = LOWORD(lParam);
		_y = HIWORD(lParam);
		return vTrue;
	}
	return vFalse;
}

Sky::OSInput::OSInput()
{
	KeyMap[VK_ESCAPE]=XKEY_NONE;
	//
	KeyMap['0']=XKEY_0;
	KeyMap['1']=XKEY_1;
	KeyMap['2']=XKEY_2;
	KeyMap['3']=XKEY_3;
	KeyMap['4']=XKEY_4;
	KeyMap['5']=XKEY_5;
	KeyMap['6']=XKEY_6;
	KeyMap['7']=XKEY_7;
	KeyMap['8']=XKEY_8;
	KeyMap['9']=XKEY_9;
	//
	KeyMap['A']=XKEY_A;
	KeyMap['B']=XKEY_B;
	KeyMap['C']=XKEY_C;
	KeyMap['D']=XKEY_D;
	KeyMap['E']=XKEY_E;
	KeyMap['F']=XKEY_F;
	KeyMap['G']=XKEY_G;
	KeyMap['H']=XKEY_H;
	KeyMap['I']=XKEY_I;
	KeyMap['J']=XKEY_J;
	KeyMap['K']=XKEY_K;
	KeyMap['L']=XKEY_L;
	KeyMap['M']=XKEY_M;
	KeyMap['N']=XKEY_N;
	KeyMap['O']=XKEY_O;
	KeyMap['P']=XKEY_P;
	KeyMap['Q']=XKEY_Q;
	KeyMap['R']=XKEY_R;
	KeyMap['S']=XKEY_S;
	KeyMap['T']=XKEY_T;
	KeyMap['U']=XKEY_U;
	KeyMap['V']=XKEY_V;
	KeyMap['W']=XKEY_W;
	KeyMap['X']=XKEY_X;
	KeyMap['Y']=XKEY_Y;
	KeyMap['Z']=XKEY_Z;
	//
	//KeyMap[VK_ESCAPE]=DIK_ESCAPE;
	//KeyMap[VK_F1]=DIK_F1;
	//KeyMap[VK_F2]=DIK_F2;
	//KeyMap[VK_F3]=DIK_F3;
	//KeyMap[VK_F4]=DIK_F4;
	//KeyMap[VK_F5]=DIK_F5;
	//KeyMap[VK_F6]=DIK_F6;
	//KeyMap[VK_F7]=DIK_F7;
	//KeyMap[VK_F8]=DIK_F8;
	//KeyMap[VK_F9]=DIK_F9;
	//KeyMap[VK_F10]=DIK_F10;
	//KeyMap[VK_F11]=DIK_F11;
	//KeyMap[VK_F12]=DIK_F12;
	//KeyMap[VK_F13]=DIK_F13;
	//KeyMap[VK_F14]=DIK_F14;
	//KeyMap[VK_F15]=DIK_F15;
	//Number Pad
	//KeyMap[VK_NUMLOCK]=DIK_NUMLOCK;
	//KeyMap[VK_ADD]=DIK_ADD;
	//KeyMap[VK_SUBTRACT]=DIK_SUBTRACT;
	//KeyMap[VK_MULTIPLY]=DIK_MULTIPLY;
	//KeyMap[VK_DIVIDE]=DIK_DIVIDE;
	//KeyMap[VK_DECIMAL]=DIK_DECIMAL;
	KeyMap[VK_NUMPAD0]=XKEY_0;
	KeyMap[VK_NUMPAD1]=XKEY_1;
	KeyMap[VK_NUMPAD2]=XKEY_2;
	KeyMap[VK_NUMPAD3]=XKEY_3;
	KeyMap[VK_NUMPAD4]=XKEY_4;
	KeyMap[VK_NUMPAD5]=XKEY_5;
	KeyMap[VK_NUMPAD6]=XKEY_6;
	KeyMap[VK_NUMPAD7]=XKEY_7;
	KeyMap[VK_NUMPAD8]=XKEY_8;
	KeyMap[VK_NUMPAD9]=XKEY_9;
	//KeyMap[]=DIK_NUMPADENTER;
	//
	KeyMap[VK_LEFT]=XKEY_LEFT;
	KeyMap[VK_RIGHT]=XKEY_RIGHT;
	KeyMap[VK_UP]=XKEY_UP;
	KeyMap[VK_DOWN]=XKEY_DOWN;
	KeyMap[VK_DELETE] = XKEY_FUN_LEFT;
	KeyMap[VK_NEXT] = XKEY_FUN_RIGHT;
	KeyMap[VK_RETURN] = XKEY_OK;

	//KeyMap[VK_PRIOR]=DIK_PRIOR;
	//KeyMap[VK_NEXT]=DIK_NEXT;

	//KeyMap[VK_HOME]=DIK_HOME;
	//KeyMap[VK_END]=DIK_END;
	//KeyMap[VK_INSERT]=XKEY_FUN_LEFT;
	//KeyMap[]
	//KeyMap[VK_DELETE]=DIK_DELETE;

	//KeyMap[VK_PRINT]=DIK_PRIOR;
	//KeyMap[VK_SCROLL]=DIK_SCROLL;
	//KeyMap[VK_PAUSE]=DIK_PAUSE;
	////
	//KeyMap[VK_LSHIFT]=DIK_LSHIFT;
	//KeyMap[VK_RSHIFT]=DIK_RSHIFT;
	//KeyMap[VK_LMENU]=DIK_LMENU;
	//KeyMap[VK_RMENU]=DIK_RMENU;
	//KeyMap[VK_LCONTROL]=DIK_LCONTROL;
	//KeyMap[VK_RCONTROL]=DIK_RCONTROL;
	//KeyMap[VK_MENU]=DIK_LMENU;
	//KeyMap[VK_APPS]=DIK_APPS;
	//KeyMap[VK_TAB]=DIK_TAB;
	//KeyMap[VK_CAPITAL]=DIK_CAPITAL;
	//KeyMap[VK_LWIN]=DIK_LWIN;
	//KeyMap[VK_RWIN]=DIK_RWIN;


	//KeyMap[VK_BACK]=DIK_BACK;	       //BACKSPACE
	//KeyMap[VK_RETURN]=DIK_RETURN;
	//KeyMap[VK_OEM_COMMA]=DIK_COMMA;			// ',<'
	//KeyMap[VK_OEM_PERIOD]=DIK_PERIOD;	// '.>'
	//KeyMap[VK_OEM_PLUS]=DIK_EQUALS;		// '+='
	//KeyMap[VK_OEM_MINUS]=DIK_MINUS;		// '-_'

	//KeyMap[VK_OEM_1]=DIK_SEMICOLON;		// ';:' 
	//KeyMap[VK_OEM_2]=DIK_SLASH;			// '/?'
	//KeyMap[VK_OEM_3]=DIK_GRAVE;			// '`~'
	//KeyMap[VK_OEM_4]=DIK_LBRACKET;		// '[{'
	//KeyMap[VK_OEM_5]=DIK_BACKSLASH;		//'\|'
	//KeyMap[VK_OEM_6]=DIK_RBRACKET;		// ']}'
	//KeyMap[VK_OEM_7]=DIK_APOSTROPHE;	// ''"'
}
}
#endif

